package solution.design;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @author zhangmin
 * @create 2021-10-21 14:19
 *
 * 设计问题--225. 用队列实现栈
 * 请你仅使用两个队列实现一个后入先出（LIFO）的栈，并支持普通栈的全部四种操作（push、top、pop 和 empty）。
 */
public class MyStack {

    Queue<Integer> queue=new LinkedList<>();
    int top_elem=0;

    public MyStack() {
    }

    //将元素 x 压入栈顶。
    public void push(int x) {
        // x 是队列的队尾，是栈的栈顶
        queue.offer(x);
        top_elem=x;
    }

    //移除并返回栈顶元素。把队列前面的都取出来再加入队尾，让之前的队尾元素排到队头，这样就可以取出了：
    public int pop() {
        int size=queue.size();
        while (size>2){
            queue.offer(queue.poll());
            size--;
        }
        //记录新的队尾栈顶元素
        top_elem=queue.peek();
        queue.offer(queue.poll());
        return queue.poll();
    }

    //返回栈顶元素。
    public int top() {
        return top_elem;
    }

    //如果栈是空的，返回 true ；否则，返回 false 。
    public boolean empty() {
        return queue.isEmpty();
    }
}
